package net.atomarrow.util;

import java.text.DecimalFormat;
import java.util.Scanner;

/**
 * double类型转换保留几位小数
 * @author Michael
 *
 */
public class NumberUtil {
    /**
     * 四舍五入
     */
    public static final int RINT=1;
    /**
     * 向下取整
     */
    public static final int FLOOR=2;
    /**
     * 向上取整
     */
    public static final int CEIL=3;
    
    
    public static double doubleValue(Double value){
    	return value == null ? 0 : value.doubleValue();
    }
    
    public static int intValue(Integer value) {
    	return value == null ? 0 : value.intValue();
    }
    
    public static long longValue(Long value) {
    	return value == null ? 0 : value.longValue();
    }
    
    /**
     * 保留一位小数
     * @param d
     * @return
     */
    public static double format(double d,int type,int digit){
        double dn = 0;
        if(digit>0){
            dn=Math.pow(10,digit);
        }else if(digit<0){
            dn=Math.pow(0.1,Math.abs(digit));
            dn=format(dn, RINT, Math.abs(digit));
        }else {
            dn = 1;
        }
        switch(type){
            case RINT:
                return Math.rint(d*dn)/dn;
            case FLOOR:
                return Math.floor(d*dn)/dn;
            case CEIL:
                return Math.ceil(d*dn)/dn;
        }
        return d;
    }
    /**
     * 保留一位小数
     * @param d
     * @return
     */
    public static double format(double d){
        return Math.rint(d*10)/10.0;
    }
    /**
     * 保留二位小数
     * @param d
     * @return
     */
    public static double format2(double d){
        return Math.rint(d*100)/100.0;
    }
    /**
     * 保留4位小数
     * @param d
     * @return
     */
    public static double format4(double d){
        return Math.rint(d*10000)/10000.0;
    }
    /**
     * 判断是否是整数
     * @param str
     * @return
     */
    public static boolean isInt(String str){
        Scanner scanner = new Scanner(str);
        return scanner.hasNextInt();
    }
    /**
     * 判断是否是Double
     * @param str
     * @return
     */
    public static boolean isDouble(String str){
        Scanner scanner = new Scanner(str);
        return scanner.hasNextDouble();
    }
    /**
     * 判断是否是Float
     * @param str
     * @return
     */
    public static boolean isFloat(String str){
        Scanner scanner = new Scanner(str);
        return scanner.hasNextFloat();
    }
    /**
     * 判断是否是Long
     * @param str
     * @return
     */
    public static boolean isLong(String str){
        Scanner scanner = new Scanner(str);
        return scanner.hasNextLong();
    }
    /**
     * 得到整数
     * @param str
     * @return
     */
    public static Integer getInt(String str){
    	if(str==null){
    		return null;
    	}
        Scanner scanner = new Scanner(str);
        return scanner.nextInt();
    }
    /**
     * 得到double
     * @param str
     * @return
     */
    public static Double getDouble(String str){
    	if(str==null){
    		return null;
    	}
        Scanner scanner = new Scanner(str);
        return scanner.nextDouble();
    }
    /**
     * 得到float
     * @param str
     * @return
     */
    public static Float getFloat(String str){
    	if(str==null){
    		return null;
    	}
        Scanner scanner = new Scanner(str);
        return scanner.nextFloat();
    }
    /**
     *  得到long
     * @param str
     * @return
     */
    public static Long getLong(String str){
    	if(str==null){
    		return null;
    	}
        Scanner scanner = new Scanner(str);
        return scanner.nextLong();
    }
    
    /**
     * 返回指定数字的格式化输出，去掉了多余的.0，小数最多保留4位
     * 
     * @param num
     * @return
     */
    public static String getFormat(Double num) {
        DecimalFormat df = new DecimalFormat("#.####");
        return df.format(num);
    }
    /**
     * 返回指定数字的千分位格式化输出
     * 
     * @param num
     * @return
     */
    public static String getFormatWithDelimiter(Double num) {
        java.text.NumberFormat numfmt =java.text.NumberFormat.getInstance();
        String result=numfmt.format(num);
        return result;
    }
    /**
     * 返回指定金额的大写
     * 
     * @param num
     * @return
     */
    public static String getUpperCaseString(Double num) {
        String result=MoneyUtil.toChinese(num.toString());
        if(result.endsWith("元")){
            return result+"整";
        }
        return result;
    }
}
